package cn.iocoder.yudao.module.crm.service.module;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.crm.controller.admin.module.vo.module.CrmModulePageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.module.vo.module.CrmModuleSaveReqVO;
import cn.iocoder.yudao.module.crm.dal.dataobject.module.CrmModuleDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 线索公海 Service 接口
 *
 * @author 数创万维
 */
public interface CrmModuleService {

    /**
     * 创建模块
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createModule(@Valid CrmModuleSaveReqVO createReqVO);

    /**
     * 更新模块
     *
     * @param updateReqVO 更新信息
     */
    void updateModule(@Valid CrmModuleSaveReqVO updateReqVO);

    /**
     * 删除模块
     *
     * @param id 编号
     */
    void deleteModule(Long id);

    /**
     * 获得模块
     *
     * @param id 编号
     * @return 线索公海
     */
    CrmModuleDO getModule(Long id);

    /**
     * 获得模块分页
     *
     * @param pageReqVO 分页查询
     * @return 线索公海分页
     */
    PageResult<CrmModuleDO> getModulePage(CrmModulePageReqVO pageReqVO);


    /**
     * 获得模块列表
     *
     * @param ids 模块编号数组
     * @return 模块列表
     */
    List<CrmModuleDO> getModuleList(Collection<Long> ids);

    default Map<Long, CrmModuleDO> getModuleMap(Collection<Long> ids) {
        if (CollUtil.isEmpty(ids)) {
            return new HashMap<>();
        }
        return CollectionUtils.convertMap(getModuleList(ids), CrmModuleDO::getId);
    }


    /**
     * 获取当前登录用户可用的模块
     * @param userId
     * @since 2024-05-30
     * @author PetePower
     * @return
     */
    List<CrmModuleDO> getEnableModuleList(Long userId);

    // 获取企业下的所有模块列表，不分类型
    List<CrmModuleDO> getEnableModuleListByTenant(Long tenantId);

    CrmModuleDO getEnableModuleListByTenantAndName(Long tenantId, String name);

    void initModule();
}